﻿///
/// En este archivo se definen los modelos, estos modelos hacen referencia a 2 puntos importantes.
/// Por un lado tenemos los handlers que se van a llamar para cada accion que se quiera realizar con los datos.
/// Al cargar los registros, ya sea uno o varios, se utiliza el de Read.
/// Al crear un registro se utiliza el create.
/// Al borrar un registro se utiliza el destroy.
/// Al actualizar un registro se utiliza else update.
/// Por ultimo tenemos el getnum que es utilizado por la funcion GetNum de FormBase.
///
/// Los fields definen los campos que va a tener y son los que hace referencia la propiedad dataIndex de las columnas.
/// estos fields tienen q tener el mismo nombre que se devuelve desde el read del handler (case sensitive).
///
/// La propiedad idProperty define el field o fields que se van a comportar como clave primaria. 
/// Esto evita que haya repetidos o se pueda obtener un objeto por su clave primaria.
///
/// Por ultimo las propiedades reader y writer tienen que ser copiadas tal cual, sino el ABM no va a funcionar como debe.
///

function GenerarProxy(url) {
    return {
        type: 'ajax',
        listeners: { exception: function (obj, res, opr) {
            try {
                var resValue = Ext.JSON.decode(res.responseText);
                if (resValue.success === false) {
                    ShowError(resValue.message);
                }
            } catch (e) { }
        }
        },
        api: {
            read: url + '?action=List',
            create: url + '?action=Create',
            destroy: url + '?action=Delete',
            update: url + '?action=Update'
        },
        reader: {
            type: 'json',
            root: 'gridData',
            messageProperty: 'message'
        },
        writer: {
            type: 'json',
            writeAllFields: true,
            root: 'data',
            allowSingle: false,
            messageProperty: 'message'
        }
    };
}

Ext.define('StartFrame.data.FirstEmptyStore', {
    extend: 'Ext.data.Store',
    listeners: {
        load: function (str) {
            var rcd = str.model.create();
            str.insert(0, rcd);
        }
    }
});

Ext.define('Model.Articulos',
{
    extend: 'Ext.data.Model',
    fields: ['id_articulo',
        'codigo',
        'descripcion',
        'id_entidad',
        'marca',
        'id_rubro',
        'id_categ_art',
        'unid_venta',
        'unid_empaque',
        'medida_empaque',
        'precio',
        'iva1',
        'iva2',
        'observaciones'],
    idProperty: 'id_articulo',
    proxy: GenerarProxy('Handlers/Mantenimiento/Articulos/Articulos.ashx')
});

Ext.define('Model.CategArticulos',
{
    extend: 'Ext.data.Model',
    fields: ['id_categ_art', 'descripcion'],
    idProperty: 'id_categ_art',
    proxy: GenerarProxy('Handlers/Mantenimiento/Articulos/CategArticulos.ashx')
});

Ext.define('Model.ClasifArticulos',
{
    extend: 'Ext.data.Model',
    fields: ['id_clasificacion', 'descripcion'],
    idProperty: 'id_clasificacion',
    proxy: GenerarProxy('Handlers/Mantenimiento/Articulos/ClasifArticulos.ashx')
});

Ext.define('Model.Rubro',
{
    extend: 'Ext.data.Model',
    fields: ['id_rubro', 'descripcion'],
    idProperty: 'id_rubro',
    proxy: GenerarProxy('Handlers/Mantenimiento/Articulos/Rubros.ashx')
});

Ext.define('Model.Entidad',
{
    extend: 'Ext.data.Model',
    fields: ['id_entidad', 'id_perfil', 'id_categ_entidad', 'nombre', 'domicilio', 'codpos', 'localidad', 'provincia', 'tel', 'fax', 'email', 'website', 'contacto', { name: 'reg_habilitado', defaultValue: true}],
    idProperty: 'id_entidad',
    proxy: GenerarProxy('Handlers/Mantenimiento/Empresas/Entidades.ashx')
});

Ext.define('Model.Comercios',
{
    extend: 'Ext.data.Model',
    fields: ['id_entidad', 'id_perfil', 'id_categ_entidad', 'nombre', 'domicilio', 'codpos', 'localidad', 'provincia', 'tel', 'fax', 'email', 'website', 'contacto', { name: 'reg_habilitado', defaultValue: true}],
    idProperty: 'id_entidad',
    proxy: GenerarProxy('Handlers/Mantenimiento/Empresas/Comercios.ashx')
});

Ext.define('Model.Proveedores',
{
    extend: 'Ext.data.Model',
    fields: ['id_entidad', 'id_perfil', 'id_categ_entidad', 'nombre', 'domicilio', 'codpos', 'localidad', 'provincia', 'tel', 'fax', 'email', 'website', 'contacto', { name: 'reg_habilitado', defaultValue: true}],
    idProperty: 'id_entidad',
    proxy: GenerarProxy('Handlers/Mantenimiento/Empresas/Proveedores.ashx')
});

Ext.define('Model.ArticuloClasificacion',
{
    extend: 'Ext.data.Model',
    fields: [
        'id_art_clas',
        'id_articulo',
        'id_clasificacion',
        'valor',
        {
            name: 'name',
            persist: false,
            convert: function (value, record) {
                if (Ext.data.StoreManager.lookup('storeClasificacion') && Ext.data.StoreManager.lookup('storeClasificacion').getById(record.get('id_clasificacion')))
                    return Ext.data.StoreManager.lookup('storeClasificacion').getById(record.get('id_clasificacion')).get('descripcion');
                return '';
            }
        }],
    idProperty: 'id_art_clas',
    proxy: GenerarProxy('Handlers/Mantenimiento/Articulos/ArticuloClasificacion.ashx')
});

Ext.define('Model.CategEnt',
{
    extend: 'Ext.data.Model',
    fields: ['id_categ_entidad', 'id_perfil', 'descripcion'],
    idProperty: 'id_categ_entidad',
    proxy: GenerarProxy('Handlers/Mantenimiento/Empresas/CategEnt.ashx')
});

Ext.define('Model.Perfil',
{
    extend: 'Ext.data.Model',
    fields: ['id_perfil', 'descripcion'],
    idProperty: 'id_perfil',
    proxy: {
        type: 'ajax',
        api: {
            read: 'Handlers/Mantenimiento/Perfil.ashx?action=ObtenerPerfiles'
        },
        reader: {
            type: 'json',
            root: 'gridData',
            messageProperty: 'message'
        },
        writer: {
            type: 'json',
            writeAllFields: true,
            root: 'data',
            allowSingle: false,
            messageProperty: 'message'
        }
    }
});

Ext.define('Model.Usuarios',
{
    extend: 'Ext.data.Model',
    fields: ['cd_operador', 'nm_operador', 'nu_interno_telefono', { name: 'st_bloqueado', type: 'bool' }, 'cd_barra_herr', { name: 'st_tracking', type: 'bool' }, { name: 'st_cambiar_clave', type: 'bool' }, 'va_clave_acceso', { name: 'fe_alta', type: 'date' }, 'de_notas', 'cd_tema', 'id_entidad'],
    idProperty: 'cd_operador',
    proxy: GenerarProxy('Handlers/Mantenimiento/Administracion/Seguridad/ConfUsuarios.ashx')
});

Ext.define('Model.GrupoOperadores',
{
    extend: 'Ext.data.Model',
    fields: ['cd_grupo_operadores', 'nm_grupo_operadores', 'nm_sector', { name: 'st_privilegio_adm', type: 'bool' }, { name: 'st_privilegio_sup', type: 'bool' }, { name: 'st_privilegio_abm', type: 'bool' }, { name: 'st_privilegio_cons', type: 'bool' }, 'cd_operador', 'fe_alta', { name: 'st_activo', type: 'bool'}],
    idProperty: 'cd_grupo_operadores',
    proxy: GenerarProxy('Handlers/Mantenimiento/GrupoOperadores.ashx')
});

Ext.define('Model.ConfigPar',
{
    extend: 'Ext.data.Model',
    fields: ['cd_parametro', 'nm_parametro', 'va_parametro'],
    idProperty: 'id_config_param',
    proxy: GenerarProxy('Handlers/Mantenimiento/Administracion/Herramientas/ConfigPar.ashx')
});

Ext.define('Model.Lista',
{
    extend: 'Ext.data.Model',
    fields: ['id_lista', 'fecha_vigencia', 'id_entidad', 'id_categ_entidad', 'id_usuario', 'nombre'],
    idProperty: 'id_lista',
    proxy: GenerarProxy('Handlers/Mantenimiento/Precios/ListaPrecios.ashx')
});

Ext.define('Model.ListaEntidad',
{
    extend: 'Ext.data.Model',
    fields: ['id_lista', 'id_entidad'],
    idProperty: 'id_entidad',
    proxy: GenerarProxy('Handlers/Mantenimiento/Precios/ListaEntidad.ashx')
});

Ext.define('Model.DesRec',
{
    extend: 'Ext.data.Model',
    fields: ['id_desrec', 'id_lista', 'id_entidad', 'id_rubro', 'id_categ_art', 'id_articulo', 'porcentaje', 'signo', 'orden_aplica'],
    idProperty: 'id_desrec',
    proxy: GenerarProxy('Handlers/Mantenimiento/Precios/DesRec.ashx')
});

Ext.define('Model.Novedad',
{
    extend: 'Ext.data.Model',
    fields: ['id_novedad', 'id_alerta', 'descripcion', { name: 'fecha_hora', type: 'date' }, 'id_usuario', 'informada', 'id_articulo', 'id_pedido'],
    idProperty: 'id_novedad',
    proxy: GenerarProxy('Handlers/Novedad.ashx')
});

Ext.define('Model.Costo',
{
    extend: 'Ext.data.Model',
    fields: ['id_costo', 'id_entidad', 'descripcion', 'valor', 'porcentaje', 'signo', 'orden_aplica'],
    idProperty: 'id_costo',
    proxy: GenerarProxy('Handlers/Mantenimiento/Precios/Costo.ashx')
});

Ext.define('Model.Presupuesto',
{
    extend: 'Ext.data.Model',
    fields: ['id_presup', { name: 'fecha', type: 'date' }, 'id_entidad', { name: 'fecha_entrega', type: 'date' }, { name: 'fecha_pago', type: 'date' }, 'total', 'observaciones'],
    idProperty: 'id_presup',
    proxy: GenerarProxy('Handlers/Mantenimiento/Precios/Presupuesto.ashx')
});

Ext.define('Model.PresupuestoDetalle',
{
    extend: 'Ext.data.Model',
    fields: ['id_presup', 'item', 'id_articulo', 'descripcion', 'precio', { name: 'cantidad', defaultValue: 1}],
    idProperty: 'id_articulo',
    proxy: GenerarProxy('Handlers/Mantenimiento/Precios/PresupuestoDetalle.ashx')
});

Ext.define('Model.PresupuestoCosto',
{
    extend: 'Ext.data.Model',
    fields: ['id_presup', 'id_costo', 'importe'],
    idProperty: 'id_costo',
    proxy: GenerarProxy('Handlers/Mantenimiento/Precios/PresupuestoCosto.ashx')
});

Ext.define('Model.Pedido',
{
    extend: 'Ext.data.Model',
    fields: ['id_pedido', { name: 'fecha', type: 'date' }, 'id_entidad_com', 'id_entidad_pro', { name: 'fecha_entrega', type: 'date' }, { name: 'fecha_pago', type: 'date' }, 'total', 'observaciones'],
    idProperty: 'id_pedido',
    proxy: GenerarProxy('Handlers/Mantenimiento/Precios/Pedido.ashx')
});

Ext.define('Model.PedidoDetalle',
{
    extend: 'Ext.data.Model',
    fields: ['id_pedido', 'item', 'id_articulo', 'descripcion', 'precio', { name: 'cantidad', defaultValue: 1 }],
    idProperty: 'id_articulo',
    proxy: GenerarProxy('Handlers/Mantenimiento/Precios/PedidoDetalle.ashx')
});

Ext.define('Model.EvolucionPrecio',
{
    extend: 'Ext.data.Model',
    fields: ['id_historial', 'id_entidad', 'entidadProveedor', 'id_articulo', 'fe_precio', 'precio_bruto', 'im_precio_neto', 'descuento', 'codigo', 'descripcion', 'marca', 'id_rubro', 'rubro', 'id_categ_art', 'categoriaArticulo', 'unid_venta', 'unid_empaque', 'medida_empaque', 'precio', 'iva1', 'iva2', 'observaciones'],
    idProperty: 'id_historial',
    proxy: GenerarProxy('Handlers/Mantenimiento/Listados/EvolucionPrecios.ashx')
});

Ext.define('Model.ListadosPrecios',
{
    extend: 'Ext.data.Model',
    fields: ['cd_comercio',
		'nm_comercio',
		'cd_proveedor',
		'nm_proveedor',
		'id_lista',
		'id_articulo',
		'codigo',
		'descripcion',
		'precio_bruto',
		'precio_neto',
        'descuento',
        'marca',
        'id_rubro',
        'rubro',
        'id_categ_art',
        'categoriaArticulo',
        'unid_venta',
        'medida_empaque',
        'precio',
        'iva1',
        'iva2',
        'observaciones',
        'id_entidad',
        'unid_empaque'
],
    proxy: GenerarProxy('Handlers/Mantenimiento/Listados/Precios.ashx')
});

Ext.define('Model.ListadosArticulos',
{
    extend: 'Ext.data.Model',
    fields: ['id_articulo', 'codigo', 'descripcion', 'id_entidad', 'entidadProveedor', 'marca', 'id_rubro', 'rubro', 'id_categ_art', 'categoriaArticulo', 'unid_venta', 'unid_empaque', 'medida_empaque', 'precio', 'precio_bruto', 'iva1', 'iva2', 'observaciones'],
    idProperty: 'id_articulo',
    proxy: GenerarProxy('Handlers/Mantenimiento/Listados/Articulos.ashx')
});